banner广告

简介

在内容底部或顶部显示的小条形广告。不应将Banner广告放置于文本、图片和应用的其他可点击部分,避免误点。

注意事项

①需要确保在SDK初始化成功后再进行广告请求,否则可能导致广告请求加载失败。

②需要初始化时配置广告基本信息。例如期望尺寸,为避免渲染过程产生广告视图形变,务必和媒体平台配置相同尺寸。通过设置CloooudMNativeExpressBannerViewDelegate代理,获取广告、展示、点击、关闭等回调。值得注意的是一定要设置rootViewController,即跳转落地页需要的viewController。

③在广告接入前需要明确各ADN对应聚合广告样式情况,以确保正确完成广告接入,避免由于广告类型不匹配导致接入报错等情况的发生。

④由于各广告平台对于包名校验规则不同,需确保在媒体平台填写的包名符合各adn平台规范,避免由于包名校验不匹配导致的无广告返回情况的产生。

⑤聚合维度广告是通过广告位ID发起广告请求的,切记不要使用混淆;

接入banner广告

// 创建广告对象
- (void)p_buildAd {
    self.bannerView = [[CloooudNativeExpressBannerView alloc] initWithSlotID:slotID rootViewController:self adSize:size]; // 聚合维度通过广告位ID发起请求;
    self.bannerView.frame = CGRectMake((self.view.width - size.width) / 2.0, self.view.height - size.height - bottom, size.width, size.height);
    self.bannerView.delegate = self;
}
// 触发广告加载
- (void)p_loadAdData {
    [self.bannerView loadAdData];
}
// 聚合维度收到load成功回调后展示
#pragma CloooudMNativeExpressBannerViewDelegate
- (void)nativeExpressBannerAdViewDidLoad:(CloooudNativeExpressBannerView *)bannerAdView {
    [self.view addSubview:self.bannerView];
}

Banner混出信息流广告

混出自渲染信息流时需在nativeExpressBannerAdNeedLayoutUI:canvasView: 回调中实现UI布局,请求、展示广告流程同Banner广告接入流程相同。

- (void)nativeExpressBannerAdNeedLayoutUI:(CloooudNativeExpressBannerView *)bannerAd canvasView:(CloooudMCanvasView *)canvasView {
    // 仅在使用自渲染混出时会回调这个方法
    // 开发者需在该方法中实现UI渲染
    // 从canvasView中获取UI展示的数据,创建UI控件,添加到canvasView中
}

获取展示后广告信息示例

在收到展示回调Visible后访问可获取到正确信息

- (void)logAdInfoAfterShow {
    CloooudMRitInfo *info = [self.bannerView.mediation getShowEcpmInfo];
    // 展示后可获取信息如下
    NSLog(@"ecpm:%@", info.ecpm); // 单位:分
    NSLog(@"platform:%@", info.adnName);
    NSLog(@"ritID:%@", info.slotID);
    NSLog(@"requestID:%@", info.requestID ?: @"None");

    NSLog(@"getAdLoadInfoList:%@", [self.bannerView.mediation getAdLoadInfoList]);
}

接口及回调说明

CloooudNativeExpressBannerView说明

方法 说明
@property (nonatomic, weak, nullable) id delegate; banner广告协议,聚合维度使用CloooudMNativeExpressBannerViewDelegate
@property (nonatomic, assign, readonly) NSInteger interval; 轮播时间间隔;30-120s之间 聚合维度不支持此场景,需在媒体平台瀑布流属性设置模块进行设置
@property (nonatomic, copy, readonly) CloooudDictionary *mediaExt; 配置参数
- (instancetype)initWithSlotID:(NSString )slotID rootViewController:(UIViewController )rootViewController adSize:(CGSize)adsize; slotID:广告位ID rootViewController:展示广告根视图 adSize:广告尺寸设置
-rootViewController:(UIViewController *)rootViewController adSize:(CGSize)adsize interval (NSInteger)interval; slotID:广告位ID rootViewController:展示广告根视图 adSize:广告尺寸设置 interval 轮播间隔 聚合维度不支持
- (instancetype)initWithSlot:(CloooudAdSlot )slot rootViewController:(UIViewController )rootViewController adSize:(CGSize)adsize; slot:广告对象 rootViewController:展示广告根视图 adSize:广告尺寸设置
- (instancetype)initWithSlot:(CloooudAdSlot )slot rootViewController:(UIViewController )rootViewController adSize:(CGSize)adsize interval:(NSInteger)interval; slot:广告对象rootViewController:展示广告根视图 adSize:广告尺寸设置 interval:轮播间隔 聚合维度不支持
- (void)loadAdData; 加载广告
- (NSString *)getAdCreativeToken; 物料ID 聚合维度不支持
@property (nonatomic, strong, nullable, readonly) CloooudNativeExpressBannerViewMediation *mediation; 当使用聚合广告位时,存在该属性,可获取聚合维度相关功能

CloooudNativeExpressBannerViewMediationProtocol说明

方法 说明
@property (nonatomic, assign, readonly) NSInteger refreshTime; 平台设置的Banner轮播时间间隔, 范围[10, 180], 其他值按0处理, 默认为0,单位秒
@property (nonatomic, assign, readonly) BOOL isReady; 是否已经准备广告展示,理论上在广告加载回调后即为YES,但受一些因素的影响(例如广告失效),可能为NO。建议在广告展示前调用该方法进行是否可以展示
- (void)destory; 不再使用加载成功后回调的view时,可调用该方法释放占用的内存
- (nullable CloooudMRitInfo *)getShowEcpmInfo; 返回显示广告对应的披露信息
- (NSArray<CloooudMRitInfo > )cacheRitList; 填充后可调用, 返回广告缓存池内所有信息;nil为无权限
@property (nonatomic, assign, readonly) BOOL isLoading; 广告是否加载中
- (void)addParam:(id)param withKey:(NSString *)key; 添加参数 param 参数值 key 参数key
- (NSArray<CloooudMAdLoadInfo > )getAdLoadInfoList; 一次waterfall中各adn代码位加载广告失败原因,建议调用时机:展示广告时/超时时/全部返回报错时;返回nil表示一次加载无代码位加载失败或其加载无响应

CloooudNativeExpressBannerViewDelegate说明

方法 说明
- (void)nativeExpressBannerAdViewDidLoad:(CloooudNativeExpressBannerView *)bannerAdView; 广告加载成功
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView )bannerAdView didLoadFailWithError:(NSError _Nullable)error; 广告加载失败
- (void)nativeExpressBannerAdViewRenderSuccess:(CloooudNativeExpressBannerView *)bannerAdView; 广告渲染成功
- (void)nativeExpressBannerAdViewRenderFail:(CloooudNativeExpressBannerView )bannerAdView error:(NSError __nullable)error; 广告渲染失败
- (void)nativeExpressBannerAdViewWillBecomVisible:(CloooudNativeExpressBannerView *)bannerAdView; 广告即将展示
- (void)nativeExpressBannerAdViewDidClick:(CloooudNativeExpressBannerView *)bannerAdView; 广告点击回调
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView )bannerAdView dislikeWithReason:(NSArray<CloooudDislikeWords > *_Nullable)filterwords; dislike原因
- (void)nativeExpressBannerAdViewDidCloseOtherController:(CloooudNativeExpressBannerView *)bannerAdView interactionType:(CloooudInteractionType)interactionType; 此方法在另一个控制器关闭时调用。
interactionType:在app中打开appstore或打开网页或查看视频广告详情页面。
- (void)nativeExpressBannerAdViewDidRemoved:(CloooudNativeExpressBannerView *)bannerAdView; 强制删除广告视图

CloooudMNativeExpressBannerViewDelegate说明

方法 说明
- (void)nativeExpressBannerAdViewDidBecomeVisible:(CloooudNativeExpressBannerView *)bannerAdView; 广告展示回调
- (void)nativeExpressBannerAdNeedLayoutUI:(CloooudNativeExpressBannerView )bannerAd canvasView:(CloooudMCanvasView )canvasView; 广告加载成功后为「混用的信息流自渲染广告」时会触发该回调,提供给开发者自渲染的时机 bannerAd 广告操作对象 canvasView 携带物料的画布,需要对其内部提供的物料及控件做布局及设置UI
轮播开启时,每次轮播到自渲染广告均会触发该回调,并且canvasView为其他回调中bannerView的子控件

完整接入示例代码

- (void)loadBannerAd {
    // 先去除上次展示的广告
    [self.bannerView removeFromSuperview];

    // 重新配置广告并加载
    CGSize adSize = CGSizeMake(375, 150); // 根据实际情况设置广告尺寸大小
    CloooudAdSlot *slot = [[CloooudAdSlot alloc] init];
    slot.ID = @"102303353"; // 聚合维度通过广告位ID发起请求;
    CloooudNativeExpressBannerView *bannerView = [[CloooudNativeExpressBannerView alloc] initWithSlot:slot rootViewController:self adSize:adSize];
    bannerView.delegate = self;
    self.bannerView = bannerView;
    [self.bannerView loadAdData];
}

/******** Banner广告回调处理 *********/
#pragma CloooudMNativeExpressBannerViewDelegate
// 广告加载成功
- (void)nativeExpressBannerAdViewDidLoad:(CloooudNativeExpressBannerView *)bannerAdView {
    // 广告加载成功之后,可以调用展示方法,按照实际需要调整代码位置
    [self.view addSubview:bannerAdView];
}

// 广告加载失败
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView *)bannerAdView didLoadFailWithError:(NSError *)error {

}

// 广告已经展示
- (void)nativeExpressBannerAdViewDidBecomeVisible:(CloooudNativeExpressBannerView *)bannerAdView {
    /*
    //  (注意: getShowEcpmInfo 需要在当前广告展示之后调用, 展示之前调用该方法会返回 nil)
    CloooudMRitInfo *info = [bannerAdView.mediation getShowEcpmInfo];
    NSLog(@"ecpm:%@", info.ecpm);
    NSLog(@"platform:%@", info.adnName);
    NSLog(@"ritID:%@", info.slotID);
    NSLog(@"requestID:%@", info.requestID ?: @"None");
    */
}

// 广告被点击
- (void)nativeExpressBannerAdViewDidClick:(CloooudNativeExpressBannerView *)bannerAdView {

}

// 用户选择了负反馈信息
- (void)nativeExpressBannerAdView:(CloooudNativeExpressBannerView *)bannerAdView dislikeWithReason:(NSArray<CloooudDislikeWords *> *)filterwords {

}

// 广告视图被移除
- (void)nativeExpressBannerAdViewDidRemoved:(CloooudNativeExpressBannerView *)nativeExpressAdView {

}       

- (void)nativeExpressBannerAdNeedLayoutUI:(CloooudNativeExpressBannerView *)bannerAd canvasView:(CloooudMCanvasView *)canvasView {
    // 仅在使用自渲染混出时会回调这个方法
    // 开发者需在该方法中实现UI渲染
    // 从canvasView中获取UI展示的数据,创建UI控件,添加到canvasView中
}

详细接入可参照demo。